import json
import os
import datetime
import random
import time


class JsonWriter(object):
    def __init__(self):
        self.ROOT_PATH = '/can_data'  # 文件根路径
        self.NOW_DATA_STR = datetime.datetime.now().date().strftime('%Y-%m-%d')
        self.file_path = os.path.join(self.ROOT_PATH, f'{self.NOW_DATA_STR}/can-{self.NOW_DATA_STR}.json')
        self.threshold = 100 * 1024 * 1024  # 文件大小阈值为100MB
        self.file_index = 1  # 文件编号为1
        self.position = 0  # 初始化数据在列表中的位置
        self.new_f = ''

    def ensure_file_exists(self):
        """
        判断文件是否存在，不存在则创建
        :return:
        """
        if not os.path.exists(os.path.dirname(self.file_path)):
            os.makedirs(os.path.dirname(self.file_path))

    def write_json_file(self, data_list: list):
        self.ensure_file_exists()  # 判断路径是否存在,不存在创建
        # 判断路径文件是否存在，不存在才写入
        if not os.path.exists(self.file_path):
            try:
                with open(self.file_path, "w", encoding="utf-8") as f:
                    # 将数据按行写入
                    for i in range(self.position, len(data_list)):  # 利用range确定要写入的数据在列表中的位置,方便后续递归调用时写入文件
                        data = data_list[i]
                        json.dump(data, f, ensure_ascii=False)
                        file_size = os.path.getsize(self.file_path)
                        # 文件大于等于100M时,就递归调用自己
                        if file_size >= self.threshold:
                            f.close()  # 关闭文件
                            self.file_index += 1  # 修改文件后缀
                            self.file_path = os.path.join(self.ROOT_PATH,
                                                          f'{self.NOW_DATA_STR}/can-{self.NOW_DATA_STR}.json.'
                                                          f'{self.file_index}')  # 指定新路径
                            self.position = i  # 修改位置为停止的位置
                            self.write_json_file(data_list)
            except ValueError:
                print(ValueError)

    # def my_open(self, f, data_list: list):
    #     # 将数据按行写入
    #
    #     for i in range(self.position, len(data_list)):  # 利用range确定要写入的数据在列表中的位置,方便后续递归调用时写入文件
    #         data = data_list[i]
    #         json.dump(data, f, ensure_ascii=False)
    #         file_size = os.path.getsize(self.file_path)
    #         # 文件大于等于100M时,就更新配置,递归调用自己
    #         if file_size >= self.threshold:
    #             f.close()
    #             self.file_index += 1  # 修改文件后缀
    #             self.file_path = os.path.join(self.ROOT_PATH,
    #                                           f'{self.NOW_DATA_STR}/can-{self.NOW_DATA_STR}.json.'
    #                                           f'{self.file_index}')  # 指定新路径
    #             self.position = i  # 修改位置为停止的位置
    #             self.new_f = open(self.file_path, "w", encoding="utf-8")
    #             self.my_open(self.new_f, data_list)  # 递归时传递文件对象
    #
    # def write_json_file(self, data_list: list):
    #     self.ensure_file_exists()  # 判断路径是否存在,不存在创建
    #     # 判断路径文件是否存在，不存在才写入
    #     if not os.path.exists(self.file_path):
    #         f = open(self.file_path, "w", encoding="utf-8")
    #         self.my_open(f, data_list)
    #         self.new_f.close()

